// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import layer from '../static/js/layer/layer.js'
import axiosPlugin from '@/assets/axios.holdtime.js'
import '@/assets/session.holdtime.js'
import '@/assets/jquery-websocket.js';
import moment from 'moment'

Vue.prototype.$moment = moment;
Vue.prototype.$dicCache = dicCache;

layer.config({
  path: "../static/js/layer/" //layer.js所在的目录，可以是绝对目录，也可以是相对目录
});

require("es6-promise").polyfill();
Vue.use(ElementUI)
Vue.config.productionTip = false

// 使用axios插件
Vue.use(axiosPlugin, {
  baseURL: process.env.API_BASH_URL,
  withCredentials: true
});

let axiosIns = Vue.prototype.$http.__axios;
// 添加请求拦截器
axiosIns.interceptors.request.use((config) => {
  // 在发送请求之前做些什么
  config.layerid = layer.load(2);
  return config;
}, (error) => {
  // 对请求错误做些什么
  console.error("请求异常", error);
  return Promise.reject(error);
});

// 添加响应拦截器
axiosIns.interceptors.response.use((response) => {
  // 对响应数据做点什么
  layer.close(response.config.layerid);
  return response;
}, (error) => {
  layer.closeAll('loading');
  // 对响应错误做点什么
  if (error.response) {
    layer.msg("服务器异常！", {
      shift: 6
    });
    console.error("响应异常", error);
  } else {
    layer.msg("登陆超时！请重新登陆！", {
      shift: 6
    });
    router.push("/");
  }
});

// 路由拦截器
router.beforeEach((to, from, next) => {
  if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
    if (session.get("session_user")) { // 通过vuex state获取当前的token是否存在
      next();
    } else {
      layer.msg("登陆超时！请重新登陆！", {
        shift: 6
      });
      next({
        path: '/',
        query: {
          redirect: to.fullPath
        } // 将跳转的路由path作为参数，登录成功后跳转到该路由
      })
    }
    
    if(to.meta.isPermission){
    	let user = session.get("session_user");
    	let flag = false;
    	user.groupList.forEach(e=>{
    		if (e.groupBh === "2") {
    			flag = true;
    		}
    	});
    	if (flag) {
    		next();
    	} else{
    		layer.msg("没有权限！", {
	        shift: 6
	      });
	      next(false);
    	}
    }
  } else {
    next();
  }
})

Vue.prototype.$websocket = $.websocket(process.env.WEBSOCKET_URL, {
	isDebug: false,
	open() {
		console.debug('websocket连接成功...');
	},
	close() {
		console.debug('websocket连接断开...');
	},
	events: {
		//						receiveMessage(d) {
		//							console.info(d);
		//						},
		//						alertMessage(d) {
		//							console.info(d);
		//						}
	}
});

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: {
    App
  },
  template: '<App/>'
})
